//#pragma code
/******************************************************************************
  Project:    Buzzer
  Modul:      pc.c
  Descr:      Protokoll ueber die serielle Schnittstelle
  Date:       25.07.10
  Autor:      ge,rk
  Notes:      -
******************************************************************************/


#include "main.h"
#include "pc.h"
#include "com.h"

// Allgemeine Fkt -------------------------------------------------------------
void PC_vIniPC(void)
{

}//end PC_vIniPC()

//Rx Msg ----------------------------------------------------------------------
void PC_vRxMsg(uc ucByte)
{
  //ucByte in Speicher schreiben
  
  //tmp direkt
  if(ucByte == 0xC1)
  {
      ucBlinkTimeTest = 1;
  }
  else if(ucByte == 0xC2)
  {
      ucBlinkTimeTest = 2;
  }


}//end PC_vRxMsg()

//Tx Msg ----------------------------------------------------------------------

//#############################################################################
//Setup a new Race
void PC_vTxReset(uc ucRaceType, ui uiRunden, ui uiZeit)
{
  COM_vTxByte(0x9F);  //1001 1111   ID=SetRace AND All Cars
  COM_vTxByte(ucRaceType);
  COM_vTxByte((uc)(uiRunden/100));  //high: 0; low: hunderter Runden
  COM_vTxByte(((uc)((uiRunden%100)/10)<<4) | ((uc)(uiRunden%10)));  //high: zehner Runden; low: einer Runden
  COM_vTxByte((uc)(uiZeit/100));  //high: 0; low: hunderter Minuten
  COM_vTxByte(((uc)((uiZeit%100)/10) <<4) | ((uc)(uiZeit%10))  );  //high: zehner Minuten; low: einer Minuten

}//end PC_vTxReset()


//#############################################################################
//Send the RaceState MSG
void PC_vTxRaceState(uc ucRaceState)
{
  COM_vTxByte(0xA0);  //1010 0000 ID=RaceCtrl(A) AND RaceStarte(0)
  COM_vTxByte(ucRaceState);    
  COM_vTxByte(0x00);          //CtrlBits-tbd

}//end PC_vTxRaceState()


//#############################################################################
void PC_vTxTriggerCar(uc ucCarID, uc ucCarState, ui uiRunden, ul ulRundenZeit)
{
  COM_vTxByte((0xB0) | (0x01 << ucCarID));  //1011 xxxx ID=CarCtrl AND CarID
  COM_vTxByte(ucCarState);

  COM_vTxByte((uc)(uiRunden/100));  //high: 0; low: hunderter Runden
  COM_vTxByte(((uc)((uiRunden%100)/10)<<4) | ((uc)(uiRunden%10)));  //high: zehner Runden; low: einer Runden

  COM_vTxByte((uc)(ulRundenZeit/10000)); //high: 0; low: 10000er ms
  COM_vTxByte(((uc)((ulRundenZeit%10000)/1000)<<4) | ((uc)((ulRundenZeit%1000)/100)) ); //high: 1000er ms; low: 100er ms
  COM_vTxByte(((uc)((ulRundenZeit%100)/10)<<4) | ((uc)((ulRundenZeit%10))) ); //high: 10er ms; low: 1er ms


}//end PC_vTxTriggerCar()

//#############################################################################
void PC_vTxResult(uc ucCar1, uc ucCar2, uc ucCar3, uc ucCar4)
{
  COM_vTxByte(ucCar1);
  COM_vTxByte(ucCar2);
  COM_vTxByte(ucCar3);
  COM_vTxByte(ucCar4);
}//PC_vTxResult()

//#############################################################################
void PC_vTxPreStart(uc ucCarID)
{
  COM_vTxByte(0xC0 | (0x01 << ucCarID));
}//end PC_vTxPreStart

void PC_vTxEnd(void){}
